#include <bits/stdc++.h>
using namespace std;
const int maxn=200;
int m,n;
char a[maxn][maxn];
int vis[maxn][maxn];
int flag=0;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct node
{
	int x,y;
	node(int xx,int yy)
	{
		x=xx,y=yy;
	}
};

void bfs(node start)
{
	queue <node> q;
	q.push(start);
	vis[start.x][start.y]=1;
	
	while(!q.empty())
	{
		node head=q.front();
		q.pop();
		
		if(head.x==m&&head.y==n)
		{
			flag=1;
			return;
		}
		
		for(int i=0;i<4;i++)
		{
			node newnode(head.x+dir[i][0],head.y+dir[i][1]);
			if(newnode.x>=1&&newnode.y>=1&&newnode.x<=m&&newnode.y<=n&&a[newnode.x][newnode.y]!='#')
			{
				if(vis[newnode.x][newnode.y]==0)
				{
					q.push(newnode);
					vis[newnode.x][newnode.y]=1;
				}
			}
		}
	}
	
}

int main()
{
	cin >> m >> n;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin >> a[i][j];
		}
	}
	node start(1,1);
	bfs(start);
	if(flag==1)
	{
		cout << "Yes" << endl;
	}
	else if(flag==0)
	{
		cout << "No" << endl;
	}
}
